home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume21 / gnuchess / patch02 next >
Encoding:
Text File  |  1991-08-01  |  21.0 KB  |  621 lines

  1. Newsgroups: comp.sources.misc
  2. From: Mike McGann <mwm@hasler.ascom.ch>
  3. Subject:  v21i048:  gnuchess - gnuchess version 3.1+, Patch02
  4. Message-ID: <1991Aug2.005505.896@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 63624b0ed67fbd6ae31d04652b2bcc71
  6. Date: Fri, 2 Aug 1991 00:55:05 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Mike McGann <mwm@hasler.ascom.ch>
  10. Posting-number: Volume 21, Issue 48
  11. Archive-name: gnuchess/patch02
  12. Patch-To: gnuchess: Volume 19, Issue 73-79
  13. Environment: UNIX, DOS
  14.  
  15. Here are patches to gnuchess3.1+ that allow it to be used
  16. with chesstool.  There is also a patch to ChessFont that
  17. makes the halos fit correctly on the white pawns as pointed
  18. out by A. N. Walker, the author of ChessFont.  Please note 
  19. that ChessFont is neither copylefted nor public domain. The
  20. file README.font is also included in this patch. In addition,
  21. I changed the makefile to name the versions for X and sunview 
  22. different names rather than have them all called gnuchessr.  
  23. To make an xboard version of gnuchessr type 'make xboard'.  
  24. To make a chesstool version type 'make chesstool'
  25.  
  26. To apply these patches, cd into the gnuchess source directory
  27. and unshar this file.  You will need to patch the sources by
  28. typing:
  29.  
  30. patch < ChessFont.patch
  31. patch < Makefile.patch
  32. patch < nondsp.patch
  33. rm *.orig *.patch
  34.  
  35. Mike Mcgann
  36. mwm@hslrswi.hasler.ascom.ch
  37. ----
  38. #! /bin/sh
  39. # This is a shell archive, meaning:
  40. # 1. Remove everything above the #! /bin/sh line.
  41. # 2. Save the resulting text in a file.
  42. # 3. Execute the file with /bin/sh (not csh) to create the files:
  43. #    ChessFont.patch
  44. #    Makefile.patch
  45. #    nondsp.patch
  46. #    README.font
  47. # This archive created: Mon Jul 29 07:44:51 1991
  48. export PATH; PATH=/bin:$PATH
  49. if test -f 'ChessFont.patch'
  50. then
  51.     echo shar: will not over-write existing file "'ChessFont.patch'"
  52. else
  53. cat << \SHAR_EOF > 'ChessFont.patch'
  54. *** /tmp/DIST/ChessFont    Mon Jul 29 07:35:40 1991
  55. --- ChessFont    Mon Jul 29 07:31:09 1991
  56. ***************
  57. *** 314,320 ****
  58.       % behaviour.  Also, they are the only symbols for which this is
  59.       % easy!
  60.   
  61. !     /WP { setpce Setfont setW 0 0 moveto (f) tofig show setB (P) Tofig
  62.           -500 -300 rmoveto show } bind def
  63.       /BP { setpce Setfont setW 0 0 moveto (f) tofig show setB (r) tofig
  64.           show } bind def
  65. --- 314,320 ----
  66.       % behaviour.  Also, they are the only symbols for which this is
  67.       % easy!
  68.   
  69. !     /WP { setpce Setfont setW 0 0 moveto (f) tofig show setB (P) tofig
  70.           -500 -300 rmoveto show } bind def
  71.       /BP { setpce Setfont setW 0 0 moveto (f) tofig show setB (r) tofig
  72.           show } bind def
  73. SHAR_EOF
  74. fi # end of overwriting check
  75. if test -f 'Makefile.patch'
  76. then
  77.     echo shar: will not over-write existing file "'Makefile.patch'"
  78. else
  79. cat << \SHAR_EOF > 'Makefile.patch'
  80. *** /tmp/DIST/Makefile    Mon Jul 29 07:35:41 1991
  81. --- Makefile    Mon Jul 29 07:27:05 1991
  82. ***************
  83. *** 22,28 ****
  84.   #
  85.   # gnuchess  will be the curses-based chess.
  86.   # gnuchessn will be the fancy-display-curses-based chess.
  87. ! # gnuchessr will be the xchess/chesstool based chess.
  88.   #        (/usr/games/chesstool gnuchessr)
  89.   #    for use with SUN's chesstool and X-window's xchess.
  90.   #    To use with latter, add -DCHESSTOOL to the nondsp.o
  91. --- 22,30 ----
  92.   #
  93.   # gnuchess  will be the curses-based chess.
  94.   # gnuchessn will be the fancy-display-curses-based chess.
  95. ! # gnuchessr will be the unfancy tty based chess.
  96. ! # gnuchessc will be the chesstool based chess.
  97. ! # gnuchessx will be the xchess based chess.
  98.   #        (/usr/games/chesstool gnuchessr)
  99.   #    for use with SUN's chesstool and X-window's xchess.
  100.   #    To use with latter, add -DCHESSTOOL to the nondsp.o
  101. ***************
  102. *** 47,62 ****
  103.   #CFLAGS= -O -Dinline=""        # for Aviion gcc-1.35
  104.   CFLAGS=    -O -finline-functions -fstrength-reduce
  105.   
  106. ! all : gnuchess gnuchessr gnuchessn postprint gnuan
  107.   
  108.   gnuchess: gnuchess.o uxdsp.o
  109.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -o gnuchess gnuchess.o uxdsp.o $(LCURSES)
  110.   
  111. ! gnuan: gnuchess.o gnuan.o
  112.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -DCHESSTOOL -o gnuan gnuchess.o gnuan.o
  113.   
  114. ! gnuchessr: gnuchess.o nondsp.o
  115. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -DCHESSTOOL -o gnuchessr gnuchess.o nondsp.o
  116.   
  117.   gnuchessn: gnuchess.o nuxdsp.o
  118.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -o gnuchessn gnuchess.o nuxdsp.o $(LCURSES)
  119. --- 49,73 ----
  120.   #CFLAGS= -O -Dinline=""        # for Aviion gcc-1.35
  121.   CFLAGS=    -O -finline-functions -fstrength-reduce
  122.   
  123. ! all : gnuchess gnuchessr gnuchessn xboard chesstool postprint gnuan
  124.   
  125.   gnuchess: gnuchess.o uxdsp.o
  126.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -o gnuchess gnuchess.o uxdsp.o $(LCURSES)
  127.   
  128. ! gnuan: gnuchess.o gnuan.o nondsp.c
  129.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -DCHESSTOOL -o gnuan gnuchess.o gnuan.o
  130.   
  131. ! chesstool: gnuchess.o nondsp.c
  132. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -DCHESSTOOL -c nondsp.c
  133. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -DCHESSTOOL -o gnuchessc gnuchess.o nondsp.o
  134. ! xboard: gnuchess.o nondsp.c
  135. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -DXBOARD -c nondsp.c
  136. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -DXBOARD -o gnuchessx gnuchess.o nondsp.o
  137. ! gnuchessr: gnuchess.o nondsp.c
  138. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -c nondsp.c
  139. !     $(CC) $(CFLAGS) $(HASH) $(BOOK) -o gnuchessr gnuchess.o nondsp.o
  140.   
  141.   gnuchessn: gnuchess.o nuxdsp.o
  142.       $(CC) $(CFLAGS) $(HASH) $(BOOK) -o gnuchessn gnuchess.o nuxdsp.o $(LCURSES)
  143. ***************
  144. *** 106,109 ****
  145.       cp gnuchess.book $(LIBDIR)/gnuchess.book
  146.   
  147.   clean:
  148. !     -rm gnuchess gnuchessr gnuchessn gnuchessd postprint gnuan *.o
  149. --- 117,120 ----
  150.       cp gnuchess.book $(LIBDIR)/gnuchess.book
  151.   
  152.   clean:
  153. !     -rm gnuchessx gnuchessc gnuchess gnuchessr gnuchessn gnuchessd postprint gnuan *.o
  154. SHAR_EOF
  155. fi # end of overwriting check
  156. if test -f 'nondsp.patch'
  157. then
  158.     echo shar: will not over-write existing file "'nondsp.patch'"
  159. else
  160. cat << \SHAR_EOF > 'nondsp.patch'
  161. *** /tmp/DIST/nondsp.c    Mon Jul 29 07:36:12 1991
  162. --- nondsp.c    Wed Jul 24 10:36:20 1991
  163. ***************
  164. *** 53,59 ****
  165.   short int debuglevel = 0;
  166.   FILE *debugfd;
  167.   #endif /*DEBUG*/
  168. ! #ifdef CHESSTOOL
  169.   short int chesstool = 1;
  170.   #else
  171.   short int chesstool = 0;
  172. --- 53,59 ----
  173.   short int debuglevel = 0;
  174.   FILE *debugfd;
  175.   #endif /*DEBUG*/
  176. ! #if defined CHESSTOOL || defined XBOARD
  177.   short int chesstool = 1;
  178.   #else
  179.   short int chesstool = 0;
  180. ***************
  181. *** 70,76 ****
  182.   Initialize (void)
  183.   {
  184.     mycnt1 = mycnt2 = 0;
  185. ! #ifdef CHESSTOOL
  186.     setlinebuf (stdout);
  187.     /* setvbuf(stdout,NULL,_IOLBF,BUFSIZ); */
  188.     printf ("Chess\n");
  189. --- 70,76 ----
  190.   Initialize (void)
  191.   {
  192.     mycnt1 = mycnt2 = 0;
  193. ! #if defined CHESSTOOL || defined XBOARD
  194.     setlinebuf (stdout);
  195.     /* setvbuf(stdout,NULL,_IOLBF,BUFSIZ); */
  196.     printf ("Chess\n");
  197. ***************
  198. *** 220,226 ****
  199. --- 220,230 ----
  200.         if (SqAtakd (PieceList[opponent][0], computer))
  201.       {
  202.         UnmakeMove (opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
  203. + #if defined CHESSTOOL
  204. +       printz ("Illegal move\n");
  205. + #else
  206.         printz ("Illegal move..(you are in check)\n");
  207. + #endif /*CHESSTOOL*/
  208.         return (false);
  209.       }
  210.         else
  211. ***************
  212. *** 246,254 ****
  213.         return (true);
  214.       }
  215.       }
  216. ! #ifdef CHESSTOOL
  217.     printz ("Illegal move (no matching move generated)");
  218.     printz ("%s\n", s);
  219.   #ifdef DEBUG
  220.     if (true)
  221.       {
  222. --- 250,261 ----
  223.         return (true);
  224.       }
  225.       }
  226. ! #if defined CHESSTOOL 
  227. !   printz ("Illegal move\n");
  228. ! #else
  229.     printz ("Illegal move (no matching move generated)");
  230.     printz ("%s\n", s);
  231. + #endif /*CHESSTOOL*/
  232.   #ifdef DEBUG
  233.     if (true)
  234.       {
  235. ***************
  236. *** 280,286 ****
  237.         fprintf (debugfd, "\n");
  238.       }
  239.   #endif /* DEBUG*/
  240. ! #else
  241.     if (cnt > 1)
  242.       ShowMessage ("Ambiguous Move!");
  243.   #endif /*CHESSTOOL*/
  244. --- 287,293 ----
  245.         fprintf (debugfd, "\n");
  246.       }
  247.   #endif /* DEBUG*/
  248. ! #if !defined CHESSTOOL && !defined XBOARD
  249.     if (cnt > 1)
  250.       ShowMessage ("Ambiguous Move!");
  251.   #endif /*CHESSTOOL*/
  252. ***************
  253. *** 477,483 ****
  254.   ShowResults (short int score, short unsigned int *bstline, char ch)
  255.   {
  256.     register int i;
  257. ! #ifndef CHESSTOOL
  258.     if (flag.post)
  259.       {
  260.         fprintf (stderr, "%2d%c %6d %4ld %8ld  ", Sdepth, ch, score, et, NodeCnt);
  261. --- 484,490 ----
  262.   ShowResults (short int score, short unsigned int *bstline, char ch)
  263.   {
  264.     register int i;
  265. ! #if !defined CHESSTOOL && !defined XBOARD
  266.     if (flag.post)
  267.       {
  268.         fprintf (stderr, "%2d%c %6d %4ld %8ld  ", Sdepth, ch, score, et, NodeCnt);
  269. ***************
  270. *** 499,505 ****
  271.   #ifndef MSDOS
  272.     signal (SIGQUIT, TerminateSearch);
  273.   #endif /* MSDOS */
  274. ! #ifndef CHESSTOOL
  275.     if (flag.post)
  276.       {
  277.         fprintf (stderr, "\nMove# %d    Target= %ld    Clock: %ld\n",
  278. --- 506,512 ----
  279.   #ifndef MSDOS
  280.     signal (SIGQUIT, TerminateSearch);
  281.   #endif /* MSDOS */
  282. ! #if !defined CHESSTOOL && !defined XBOARD
  283.     if (flag.post)
  284.       {
  285.         fprintf (stderr, "\nMove# %d    Target= %ld    Clock: %ld\n",
  286. ***************
  287. *** 531,537 ****
  288.         printz ("%s\n", ColorStr[computer]);
  289.         ExitChess ();
  290.       }
  291. ! #ifndef CHESSTOOL
  292.     if (flag.post)
  293.       {
  294.         fprintf (stderr, "Nodes= %ld  Eval= %ld  Rate= %ld  ",
  295. --- 538,544 ----
  296.         printz ("%s\n", ColorStr[computer]);
  297.         ExitChess ();
  298.       }
  299. ! #if !defined CHESSTOOL && !defined XBOARD
  300.     if (flag.post)
  301.       {
  302.         fprintf (stderr, "Nodes= %ld  Eval= %ld  Rate= %ld  ",
  303. ***************
  304. *** 545,553 ****
  305.   #ifdef DEBUG
  306.     fprintf (debugfd, "My move is: %s\n", mvstr[0]);
  307.   #endif /* DEBUG */
  308.     if (flag.beep)
  309.       printz ("%c", 7);
  310.     if (root->flags & draw)
  311.       fprintf (stderr, "Drawn game!\n");
  312.     else if (root->score == -9999)
  313. --- 552,561 ----
  314.   #ifdef DEBUG
  315.     fprintf (debugfd, "My move is: %s\n", mvstr[0]);
  316.   #endif /* DEBUG */
  317. + #if !defined CHESSTOOL
  318.     if (flag.beep)
  319.       printz ("%c", 7);
  320. ! #endif /*CHESSTOOL*/
  321.     if (root->flags & draw)
  322.       fprintf (stderr, "Drawn game!\n");
  323.     else if (root->score == -9999)
  324. ***************
  325. *** 629,635 ****
  326.   void
  327.   ClrScreen (void)
  328.   {
  329. ! #ifndef CHESSTOOL
  330.     printz ("\n");
  331.   #endif
  332.   }
  333. --- 637,643 ----
  334.   void
  335.   ClrScreen (void)
  336.   {
  337. ! #if !defined CHESSTOOL && !defined XBOARD
  338.     printz ("\n");
  339.   #endif
  340.   }
  341. ***************
  342. *** 1065,1071 ****
  343.   void
  344.   PromptForMove (void)
  345.   {
  346. ! #ifndef CHESSTOOL
  347.     printz ("\nYour move is? ");
  348.   #endif /* CHESSTOOL */
  349.   }
  350. --- 1073,1079 ----
  351.   void
  352.   PromptForMove (void)
  353.   {
  354. ! #if !defined CHESSTOOL && !defined XBOARD
  355.     printz ("\nYour move is? ");
  356.   #endif /* CHESSTOOL */
  357.   }
  358. ***************
  359. *** 1230,1241 ****
  360.         player = opponent;
  361.         if (strcmp (s, "bd") == 0)
  362.       {
  363. ! #ifdef CHESSTOOL
  364.         chesstool = 0;
  365.   #endif /*CHESSTOOL*/
  366.         ClrScreen ();
  367.         UpdateDisplay (0, 0, 1, 0);
  368. ! #ifdef CHESSTOOL
  369.         chesstool = 1;
  370.   #endif /*CHESSTOOL*/
  371.       }
  372. --- 1238,1249 ----
  373.         player = opponent;
  374.         if (strcmp (s, "bd") == 0)
  375.       {
  376. ! #if defined CHESSTOOL || defined XBOARD
  377.         chesstool = 0;
  378.   #endif /*CHESSTOOL*/
  379.         ClrScreen ();
  380.         UpdateDisplay (0, 0, 1, 0);
  381. ! #if defined CHESSTOOL || defined XBOARD
  382.         chesstool = 1;
  383.   #endif /*CHESSTOOL*/
  384.       }
  385. ***************
  386. *** 1367,1373 ****
  387.         computer = opponent;
  388.         opponent = otherside[computer];
  389.       }
  390. ! #ifdef CHESSTOOL
  391.     printf ("%d. %s", ++mycnt2, s);
  392.     if (flag.post)
  393.       {
  394. --- 1375,1381 ----
  395.         computer = opponent;
  396.         opponent = otherside[computer];
  397.       }
  398. ! #if defined CHESSTOOL || defined XBOARD
  399.     printf ("%d. %s", ++mycnt2, s);
  400.     if (flag.post)
  401.       {
  402. SHAR_EOF
  403. fi # end of overwriting check
  404. if test -f 'README.font'
  405. then
  406.     echo shar: will not over-write existing file "'README.font'"
  407. else
  408. cat << \SHAR_EOF > 'README.font'
  409. PostScript Chess Font -- "README" file.
  410. ========== ===== ==== == ======== =====
  411.  
  412.     Copyright (c) 1991 A. N. Walker.  All rights reserved.
  413.  
  414. Restrictions on Use:
  415. ------------ -- ----
  416.     You must keep the copyright notice on this file and on the
  417. accompanying "Font" file.  If you change anything, you must clearly
  418. mark your changes.  Otherwise, you may use these files as you please
  419. for private, educational or research purposes.  You may also use them
  420. freely for commercial purposes as long as you do not make any changes
  421. to the shapes of the pieces without my approval.
  422.  
  423.     I do not, and am in no position to, make any claim as to
  424. suitability of these files for any specific purpose.  They work for
  425. me, and if they work for you too I shall be pleased.  If they do not
  426. work for you, well, you have what you paid for.
  427.  
  428.     If you are pleased with the results, please let me [and your
  429. readers, if any!] know.  If you manage to make money out of them,
  430. please let me know how!  I'd quite like to see [real or PostScript]
  431. copies of what you manage to do, if you have the necessary time,
  432. inclination and resources.
  433.  
  434.     If you don't like the results, please let me know why.  Indeed,
  435. if you have any comments, please e- or snail- mail them to me.
  436.  
  437. What you have to do:
  438. ---- --- ---- -- ---
  439.     You should have three files, called "Font", "Demo" and "Table".
  440. If you have a way of viewing PostScript, shovel "Font" and "Demo" or
  441. "Font" and "Table" at it;  for example, I use the commands
  442.  
  443.         lpr -Plwriter Font Demo
  444.         lpr -Plwriter Font Table
  445.  
  446. to see the results on "my" LaserWriter.  If you have no way of viewing
  447. PostScript, then I'm sorry, but I can't help you.  What you should see
  448. is an assorted collection of boards and figurines in various sizes and
  449. rotations ("Demo") or a neat table showing all the symbols in the font
  450. ("Table").  If anything else happens, you will have to consult someone
  451. who knows what they're doing -- *not* me!  I can promise you that the
  452. files as shipped print nicely on a bog-standard Apple LW+.  They take
  453. several minutes each to print on our LW+;  this is largely because they
  454. make almost pessimal use of the font caching mechanism -- lots of big
  455. characters are printed once each in different sizes and orientations.
  456. Conventional pages with lots of figurines or ordinary text and only a
  457. few diagrams print acceptably quickly (especially, of course, if you
  458. have a faster or more recent LW).
  459.  
  460.     If you are happy with the demos, you can then install the "Font"
  461. file as a font in your system.
  462.  
  463.     ****************************************
  464.     * I cannot help you with this process! *
  465.     ****************************************
  466.  
  467. I can't even do it for our own computer, which has a much-hacked (from
  468. its PDP-11 days) version of Troff;  I leave it to our guru.  Neither
  469. he nor I know what magic you have to utter for an unhacked Troff, or
  470. for TEX, or for Macs or PCs or whatever weird and wonderful software
  471. or hardware you possess.  When you install the font, you may also find
  472. it useful to grab some of the PostScript code from "Demo", especially
  473. if you want to draw (for example) labelled diagrams.
  474.  
  475. What there is in the Font:
  476. ---- ----- -- -- --- -----
  477.     There are really two fonts wrapped up into one.  The more
  478. conventional sub-font is the so-called "text mode", and is what you
  479. get when you first select the font.  This mode itself has two major
  480. components.  The upper case letters are the figurines, for use in
  481. text.  For example, "Q" draws a queen figurine.  Lower case letters
  482. and other symbols are (most of) the Informant symbols (omitting only
  483. symbols like "?" and "ch" that you can reasonably expect to find in
  484. boring old Times Roman, but including "+" and "-").  I've been as
  485. mnemonic as I could, but there are just too many symbols.
  486.  
  487.     The other sub-font is "diagram mode".  In this, upper case
  488. letters draw white pieces, and lower case letters draw black pieces.
  489. For example, "Knk" draws a white king adjacent to a black knight
  490. and a black king.  The pieces include a selection of fairy pieces
  491. and other related symbols -- everything I've seen or had reported
  492. to me on chess diagrams in the last few years.  The other symbols
  493. in this sub-font consist of board-drawing components and motions
  494. to facilitate the construction of diagrams.  You switch between
  495. text and diagram modes using the prime symbol, "'".  For example,
  496. the famous Reti study can be diagrammed by the PostScript:
  497.  
  498.         ('#[7K;8;k1P;7p;8;8;8;8]') show
  499.  
  500. where "#" draws the board, and the stuff between "[...]" is the
  501. conventional Forsythe notation for the position.  Obviously, for
  502. practical use, you will need a chess pre-processor (which I have
  503. *not* written!).
  504.  
  505.     Most of the capabilities of the font are illustrated on
  506. the demo page, which also includes some possibly-useful PostScript
  507. procedures for various of the effects.
  508.  
  509.     Warning:  the dual-mode font treads on very thin ice in
  510. some places!  In particular, the caching mechanisms of PostScript
  511. are very easy to fool with a dynamic font of this type.  For example,
  512. finding the width of a string is fraught with danger;  do it only
  513. with strings that include matched pairs of primes.
  514.  
  515. The font design:
  516. --- ---- -------
  517.     There are surprisingly many different chess fonts in use in
  518. printed books.  I have tried to copy the simplest -- for example,
  519. the rooks have no brickwork, and the kings are quite plain.  Note
  520. that the pieces do not scale well.  Large pieces (inches high) for
  521. posters, etc., will have to be specially designed (and are usually
  522. based on "real" Staunton pieces).  Tiny pieces suffer from the lack
  523. of resolution on 300 dpi (or coarser) printers.  On a 300 dpi printer,
  524. 7-point is really too small, anything less is hopeless (see the demo).
  525. I usually use 15-point, which is comparable with most books.
  526.  
  527.     The hardest piece to get right is the knight.  The book designs
  528. are hopeless at 300 dpi resolution, as there are too many fine lines
  529. around the mouth and chin.  Any attempts to copy them just look like a
  530. caricature.  So I've made it a bit chunkier.  Most readers don't notice.
  531.  
  532.     Note that most of the pieces (as opposed to the figurines)
  533. cannot be cached.  This is because they include both write-white and
  534. write-black components (partly, but not entirely, because they have
  535. to work on black squares);  this makes drawing a whole page of black
  536. kings (or whatever) rather slooow.  Fortunately, you don't often need
  537. such a thing.  The figurines *are* cached, so are the Informant symbols,
  538. and so are the commonest pieces (the black squares, and the pawns of
  539. both colours).
  540.  
  541. Foreign usage:
  542. ------- ------
  543.     Foreign users may want to re-assign the letters used for the
  544. various pieces.  This can easily be done in the Font file.  Lines
  545. such as
  546.  
  547.     dup 8#113 /WK put        % 'K'
  548.  
  549. (not too far down the file) signify that ASCII character 113 (octal), or
  550. "K", is to draw the White King.  If you want some other character to draw
  551. the WK, alter the 113 to match.  You will have to change the BK and Kfig
  552. by the same amount, and you will also have to reassign whatever symbol
  553. your chosen character already draws, if any.  Another minor problem is
  554. that some of the fairy pieces are defined explicitly in terms of the
  555. existing pieces -- eg, if you decide to use "F" to draw White queens,
  556. then the procedure for Grasshoppers (look for "WG" in Font) must be
  557. changed to draw upside-down "F" instead of upside-down "Q".  I hope the
  558. necessary edits are obvious even to non-PostScript users.  I suggest that
  559. after any change you try the Table and Demo files again.
  560.  
  561. Unusual chess pieces:
  562. ------- ----- -------
  563.     I've included a fair number of pieces that may not be familiar to
  564. all chess players.  These include:
  565.     F for fou, French version of bishop.  There are several designs
  566.         of fou in print, I have selected the easiest to implement.  If
  567.         you want one of the others, you'll have to write it yourself.
  568.     D,X for draughts pieces.  Note that these are not cached (except
  569.         as figurines);  if you are writing a book on draughts with
  570.         lots of diagrams, you might find it worthwhile to re-write
  571.         them in a cachable way.  This is easier if you want to use
  572.         them on the white squares (you don't need the "halo" effect),
  573.         but the books I have seen are about equally split on this.
  574.     C,I,T for chameleon, imitator, rose.  Various fairy pieces.
  575.     E,G,L,M,O,S,U,V,Z for various rotated standard pieces, used in
  576.         fairy chess.  Note that the "Demo" file includes a more
  577.         general way to rotate a piece.  I have used S for nightrider,
  578.         oppositely to the problemists convention which uses S for
  579.         knight and N for nightrider;  there is no way that the average
  580.         player is going to change his habits!  If you are a problemist,
  581.         feel free to interchange S and N (and then M and Z).
  582.     .,@,|,_ for various other marks useful in annotating diagrams.
  583.         See the "Demo" file for examples of their use.
  584.     A,H,J,W,Y are unused.  Feel free to use them to add new pieces.
  585.  
  586. Go pieces:
  587. -- -------
  588.     Sorry, despite several requests, I haven't put these in.  I
  589. can't save the whole world in one easy lesson.  The pieces themselves
  590. and the board are easy in PostScript;  the annotations and the necessary
  591. pre-processor are another kettle of fish.  The Go stones could also be
  592. used for Reversi (Othello).
  593.  
  594. Bridge symbols:
  595. ------ --------
  596.     No-one has actually asked for these, but just to forestall you,
  597. note that they are already provided in many places -- symbol fonts,
  598. dingbats fonts, Hershey fonts, ....
  599.  
  600. Final comments:
  601. ----- ---------
  602.     Suggestions for improvements, especially in the PostScript,
  603. will be welcomed.  Especially if they improve portability (which I
  604. can't check locally!).  Especially if you've tried them yourself,
  605. and can vouch that they work.  Suggestions for extra symbols (other
  606. than Go or Bridge) also welcomed, especially if accompanied by
  607. PostScript or other descriptions of their shape.
  608.  
  609. -- 
  610. Andy Walker, Maths Dept., Nott'm Univ., UK.
  611. anw@maths.nott.ac.uk
  612. SHAR_EOF
  613. fi # end of overwriting check
  614. #    End of shell archive
  615. exit 0
  616.  
  617. exit 0 # Just in case...
  618.